﻿#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

typedef int LTDatatype;
//定义双向带头循环链表的结构
typedef struct ListNode {
	LTDatatype data;
	struct ListNode* next;
	struct ListNode* prev;
}LTNode;

//初始化
LTNode* LTInit();
//void LTInit(LTNode** pphead);

//销毁
//void LTDesTroy(LTNode** pphead);
//接口一致性,传一级，在函数调用结束后需要手动将实参置为NULL
void LTDesTroy(LTNode* phead);

//打印链表数据
void LTPrint(LTNode* phead);

//判断是否为空链表
bool LTEmpty(LTNode* phead);

//尾插
//phead节点不会发生改变，参数就为一级
//phead节点发生改变，参数就为二级
void LTPushBack(LTNode* phead, LTDatatype x);

//头插
void LTPushFront(LTNode* phead, LTDatatype x);

//尾删
void LTPopBack(LTNode* phead);

//头删
void LTPopFront(LTNode* phead);

//查找指定节点
LTNode* LTFind(LTNode* phead, LTDatatype x);

//在pos位置之后插⼊数据----pos位置之前插入代码基本是一样的（双向的）--课下可以实现以下在pos之前插入
void LTInsert(LTNode* pos, LTDatatype x);

//删除pos位置的节点
void LTErase(LTNode* pos);
